import csv
import openpyxl
import os

def dict2excel(filename: str, data_list: list):
    """
    将列表中的字典数据，写入到excel中
    :param filename: 文件名
    :param data_list: 数据
    :return:
    """
    # 处理文件名
    if filename.endswith('xlsx'):
        filepath = os.getcwd() + os.sep + 'export_data' + os.sep + filename
    else:
        filepath = os.getcwd() + os.sep + 'export_data' + os.sep + filename + '.xlsx'
    # 判断文件路径是否存在，不存在则创建
    if not os.path.exists(os.getcwd() + os.sep + 'export_data'):
        os.makedirs(os.getcwd() + os.sep + 'export_data')
    # region 判断工作表是否存在
    # if os.path.exists(filepath):
    #     workbook = openpyxl.load_workbook(filepath)
    # else:
    #     workbook = openpyxl.Workbook()
    # endregion
    # 创建工作表
    workbook = openpyxl.load_workbook(filepath) if os.path.exists(filepath) else openpyxl.Workbook()
    sheet = workbook.create_sheet('output_data', 0)
    # 获取字典中的key值，用来当作excel表的title
    keys = list(list_of_data[0].keys())
    # 将title写入到excel中
    for title_id in range(1, len(keys)+1):
        sheet.cell(row=1, column=title_id, value=keys[title_id-1])
    # 将数据写入到excel中
    for row in range(2, len(data_list)+2):   # 行，第一行是title，所以从2开始
        for col, key in zip(range(1, len(keys)+1), keys):  # 列, 因为是字典，所有需要获取key值
            sheet.cell(row=row, column=col, value=data_list[row-2][key])
    workbook.save(filepath)
    print(data_list)


def dict2csv(filename: str, data_list: list):
    """
    将列表中的字典数据，写入到excel中
    :param filename: 文件名
    :param data_list: 数据
    :return:
    """
    # 处理文件名
    if filename.endswith('xlsx'):
        filepath = os.getcwd() + os.sep + 'export_data' + os.sep + filename
    else:
        filepath = os.getcwd() + os.sep + 'export_data' + os.sep + filename + '.csv'
    # 判断文件路径是否存在，不存在则创建
    if not os.path.exists(os.getcwd() + os.sep + 'export_data'):
        os.makedirs(os.getcwd() + os.sep + 'export_data')
    if os.path.exists(filepath):
        os.rename(filepath, filepath + '.back')

    with open(filepath, 'w', encoding='utf8', newline='') as f:
        keys = data_list[0].keys()
        # dict_writer = csv.DictWriter(f, keys, delimiter='|')
        dict_writer = csv.DictWriter(f, keys)
        dict_writer.writeheader()
        for data_dict in data_list:
            dict_writer.writerow(data_dict)
    print(data_list)


if __name__ == '__main__':
    list_of_data = []
    for i in range(1, 6):
        data = {
            'name': 'c酱{}'.format(i),
            'age': 12
        }
        list_of_data.append(data)
    dict2csv('a', list_of_data)
